package com.lollipop.programming.designpattern.strategy;

import java.math.BigDecimal;

/**
 * @Author Lollipop
 * @Date 2025/4/10 8:37
 * @Description 订单类-策略模式-模拟订单支付（云闪付、支付宝、微信）
 * 订单类，包含订单号、订单金额、支付状态等信息，同时包含执行支付的方法，该方法接受一个支付策略对象作为参数，
 * 并调用该对象的支付方法来完成支付。
 * 订单类的作用是封装订单的信息和支付逻辑，使得支付逻辑可以独立于订单类之外，从而提高代码的可维护性和可扩展性。
 * 同时，订单类还可以通过策略模式来实现不同的支付方式，从而使得订单类的代码更加简洁和易于理解。
 * 例如，订单类可以使用云闪付支付策略、支付宝支付策略、微信支付策略等不同的支付策略来完成支付，从而使得订单类的代码更加灵活和可扩展。
 * 同时，订单类还可以通过策略模式来实现不同的支付方式，从而使得订单类的代码更加简洁和易于理解。
 */
public class SimpleOrder {
    /**
     * 订单号
     */
    private String orderNo;
    /**
     * 订单金额
     */
    private BigDecimal amount;
    /**
     * 支付状态
     */
    private boolean payStatus;

    public SimpleOrder(String orderNo, BigDecimal amount) {
        this.orderNo = orderNo;
        this.amount = amount;
    }

    /**
     * 执行支付
     *
     * @param paymentStrategy
     * @return
     */
    public boolean executePayment(PaymentStrategy paymentStrategy) {
        return paymentStrategy.pay(amount);
    }
}
